#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
应用图标生成脚本 - 为iOS崩溃堆栈解析工具创建.icns图标文件
"""

import os
import sys
import subprocess
import tempfile
import shutil
from PIL import Image, ImageDraw, ImageFont

def check_dependencies():
    """检查依赖项"""
    try:
        from PIL import Image
        print("已安装Pillow库")
    except ImportError:
        print("未安装Pillow库，正在安装...")
        subprocess.call([sys.executable, '-m', 'pip', 'install', 'Pillow'])
    
    # 检查iconutil命令（macOS自带）
    try:
        subprocess.run(['iconutil', '--help'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print("检测到iconutil工具")
    except FileNotFoundError:
        print("错误: 未找到iconutil工具，该工具是macOS自带的")
        print("请确保您在macOS系统上运行此脚本")
        sys.exit(1)

def create_app_icon():
    """创建应用图标"""
    print("正在创建应用图标...")
    
    # 创建一个临时目录
    with tempfile.TemporaryDirectory() as temp_dir:
        # 创建iconset目录
        iconset_dir = os.path.join(temp_dir, 'app_icon.iconset')
        os.makedirs(iconset_dir, exist_ok=True)
        
        # 定义图标尺寸
        icon_sizes = [
            (16, '16x16'), 
            (32, '16x16@2x'), 
            (32, '32x32'), 
            (64, '32x32@2x'), 
            (128, '128x128'), 
            (256, '128x128@2x'), 
            (256, '256x256'), 
            (512, '256x256@2x'), 
            (512, '512x512'), 
            (1024, '512x512@2x')
        ]
        
        # 生成不同尺寸的图标
        for size, name in icon_sizes:
            icon_path = os.path.join(iconset_dir, f'icon_{name}.png')
            generate_icon(size, icon_path)
            print(f"已生成 {name} 图标")
        
        # 使用iconutil将iconset转换为icns
        try:
            subprocess.run([
                'iconutil', 
                '-c', 'icns', 
                iconset_dir, 
                '-o', 'app_icon.icns'
            ], check=True)
            print("\n图标文件已成功生成: app_icon.icns")
        except subprocess.CalledProcessError as e:
            print(f"转换图标时出错: {e}")
            sys.exit(1)

def generate_icon(size, output_path):
    """生成单个图标"""
    # 使用logo.png作为背景图像
    img = Image.open('logo.png').convert('RGBA')
    img = img.resize((size, size), Image.LANCZOS)
    
    # 保存图像
    img.save(output_path)

def main():
    """主函数"""
    print("=" * 60)
    print("iOS崩溃堆栈解析工具 - 图标生成器")
    print("=" * 60)
    
    # 检查依赖项
    check_dependencies()
    
    # 如果已存在app_icon.icns文件，询问是否覆盖
    if os.path.exists('app_icon.icns'):
        response = input("app_icon.icns文件已存在，是否覆盖? (y/n): ")
        if response.lower() != 'y':
            print("操作已取消")
            sys.exit(0)
    
    # 创建图标
    create_app_icon()

if __name__ == "__main__":
    main() 